package pkg.orange.online;

import android.util.Log;

/**
 * Klasa do przechowywania pojedynczego elementu z dostępnych środków na koncie.
 */
public class OrangeData {
	
	/**
	 * Pole wyświetlane na stronie orange lub jego fragment. 
	 * Przykładowo dla "Środki do wykorzystania do innych sieci w ramach Gotowy do Rozmowy"
	 * wystarczy "środki do wykorzystania do innych sieci" (o ile jest to unikalne na całej stronie)
	 */
	private String formName;
	
	/**
	 * Nazwa pola wyświetlana na widżecie, np. "Pozostałe środki"
	 */
	private String displayName; 
	
	/**
	 * Ważność środków (wartość pobrana z serwisu)
	 * Np. "19.10.2012 (22 dni)"
	 */
	private String date; 
	
	/**
	 * Wartość środków (wartość pobrana z serwisu)
	 * Np. "261 min. 16 s "
	 */
	private String value; 
	
	/**
	 * Wynik po sformatowaniu, który zostanie wyświetlony na widżecie
	 * Dla powyższych przykładowych wartości, będzie to:
	 * "261 min. 16 s (22 dni)"
	 */
	private String formattedValue; //odczyt = data i wartosc do wyswietlenia na widzecie
	/**
	 * Konstruktor - przekazywana jest nazwa szukanego pola, wartość zostanie odszukana w serwisie 
	 * @param formName Pole wyświetlane na stronie orange lub jego fragment. 
	 * 					Przykładowo dla "Środki do wykorzystania do innych sieci w ramach Gotowy do Rozmowy"
	 * 					wystarczy "środki do wykorzystania do innych sieci" (o ile jest to unikalne na całej stronie)
	 * @param displayName Nazwa pola wyświetlana na widżecie, np. "Pozostałe środki"
	 */
	public OrangeData(String formName, String displayName){
		setFormName(formName);
		setDisplayName(displayName);
	}
	
	public void setFormName(String formName){
		this.formName = formName.toLowerCase();
	}

	public String getFormName(){
		return formName;
	}
	
	public void setDisplayName(String displayName){
		this.displayName = displayName;
	}
	
	public String getDisplayName(){
		return displayName;
	}
	
	public void setDate(String date){
		this.date = date;
	}
	
	public void setValue(String value){
		this.value = value;
	}
	
	/**
	 * Służy do weryfikacji pobranych danych.
	 * Jeżeli funkcja zwróci true, to możemy spokojnie wywołać
	 * getFormattedValue i wyświetlić wartość
	 */
	public boolean checkData(){
		formattedValue = "";
		if(value != null){
			formattedValue = value;
		}
		else
			return false;
		if(date != null){
			int posBegin = date.indexOf('(');
			int posEnd = date.indexOf(')');
			if(posBegin>-1 && posEnd>-1){
				formattedValue = formattedValue + " " +date.substring(posBegin, posEnd+1);
				return true;
			}
			else
				return false;
		}
		else return false;
	}
	
	/**
	 * Zwraca sformatowaną wartość, która jest gotowa do wyświetlenia na widżecie
	 */
	public String getFormattedValue(){
		if(formattedValue==null)
			checkData();
		return formattedValue;
	}
	
	public void debug(){
		Log.d("OrangeData","debug: formName: " + formName);
		Log.d("OrangeData","debug: DisplayName: " + displayName);
		Log.d("OrangeData","debug: Date: " + date);
		Log.d("OrangeData","debug: Value: " + value);
		Log.d("OrangeData","debug: FormattedValue: " + formattedValue);
	}
	
}


